package cn.tedu.pic.service;

import com.jt.common.utils.UploadUtil;
import com.jt.common.vo.PicUploadResult;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

@Service
public class PicService {

    public PicUploadResult picUpload(MultipartFile pic) {
        /*  准备PicUploadResult
            1.pic验证名称后缀合法 .png .jpg .gif .jpeg ...
            2.生成多级路径
                2.1 随机一个字符串,将字符串切分 /d/s/k/a/s/d/l/f/k/h/
                2.2 调用UploadUtil的方法 可以根据图片原名称生成多级路径
                /upload/a/3/d/r/6/y/8/g/ 业务前缀+hash字符串8位
            3.上传图片,将图片资源数据,存储到这个多级路径中
                d:/img//upload/a/3/d/r/6/y/8/g/alsdj.png
            4.生成url
                http://image.jt.com/upload/a/3/d/r/6/y/8/g//alsdj.png
            返回picUploadResult
         */
        PicUploadResult result=new PicUploadResult();
        try{
            //拿到原名
            String oName = pic.getOriginalFilename();
            //截取后缀
            String extName = oName.substring(oName.
                    lastIndexOf("."));
            //不合法返回失败
            if(!extName.matches(".(png|jpg|jpeg|webp)$")){
                //进入if表示后缀不合法
                result.setError(1);
                return result;
            };
            //生成路径 path=/easymall/a/b/c/d/e/f/g/h
            String path=UploadUtil.getUploadPath(oName,
                    "/upload")+"/";
            //创建磁盘文件夹 dir=d:/img/easymall/a/b/c/d/e/f/g/h
            String dir="e:/img"+path+"/";
            File _dir=new File(dir);
            if(!_dir.exists()){
                _dir.mkdirs();
            }
            //上传文件图片
            //给图片生成一个新名字
            //newName=17c3f20e-ef86-4857-9293-f29e52954a95.png
            String newName= UUID.randomUUID().toString()+extName;
            //输出 dir+newName=dir=d:/img/easymall/a/b/c/d/e/f/g/h/1.png
            pic.transferTo(new File(dir+newName));
            //url=http://image.jt.com/easymall/a/b/c/d/e/f/g/h/1.png
            String url="http://image.jt.com"+path+"/"+newName;
            result.setUrl(url);
            return result;
        }catch (Exception e){
            e.printStackTrace();
            result.setError(1);
            return result;
        }

    }
}
